﻿/*
 Program analogiczny do	WR-Z-12		(03-IV-113)

 Program perforuje napisy w tzw. kodzie wizualnym:
 znaki kodu dalekopisowego nr 2 wprowadzane z dalekopisu
 tłumaczy na układy rządków na taśmie wychodzącej z perforatora 5-kanałowego tak,
 iż układ dziurek przypomina kształtem litery, cyfry i znaki przestankowe
 o stałej wysokości 8 kwintetów, w układzie pionowym.
 Program pracuje na drugiej ścieżce ferrytowej i należy go startować od adresu 17400.
 Po zatrzymaniu się wystarczy wcisnąć [StartCPU] dla ponownego uruchomienia.
 Może być wywołany jako podprogram od adresu 17401 z adresem napisu w A w skali 21,
 kończącego się znakiem LF. Znak CR daje całkowicie zadziurkowane pole.
 Jeśli nie przełączono, to pierwszy znak jest z pocztu cyfr.

 Program jest zgodny z alfabetem dalekopisu TTY MKD-2 PL2.
*/


;Etyk:	Rozkaz			Komentarz
;=====	===================	================================
	:401 17400:		Adr. pocz. programu

PROGR	:032 czTTY prog1 60	B6 = czTTY;	funkcja czytania znaku

PODPR	:726 00000 podp2 00	Ślad - powrót do progr. głównego
poczt	:000 00000 00000 00	Poczet: 0=cyfry, 32=litery
podp2	:021 temp6   +   60	[temp6] = B6;
	:021 temp5   +   50	[temp5] = B5;
	:021 temp4   +   40	[temp4] = B4;
	:032 czTXT   +   60	B6 = czTXT;
	:402 00000   +   50	B5 = A;		adres napisu
	:002 00000   +   40	B4 = 0;		liczba znaków w A
	:746 funkc   +   00	SkS funkc;
	:012 temp4   +   40	B4 = [temp4];
	:012 temp5   +   50	B5 = [temp5];
	:012 temp6 PODPR 60	B6 = [temp6];	i Return

prog1	:050 kodFS   +   00	A = FS;
	:626 00000   +   00	Wy6 = FS;
	:746 funkc   +   00	SkS funkc;
	:726 00000 PROGR 00	Stop;

funkc	:726 00000 funk2 00	Ślad - powrót do PROGR/PODPR
gdyLS	:001 poczt nZnak 00	[poczt] = 0;
funk2	:021 temp7   +   70	[temp7] = B7;
	:021 temp3   +   30	[temp3] = B3;
gdyFS	:032 00040   +   30	B3 = 32;
	:021 poczt   +   30	[poczt] = B3;
nZnak	:000 00000 00000 61	Skocz do czTTY/czTXT; A = znak...
jZnak	:116 00021   +   00	A >>>= 17;	A = znak w skali 21
kodFS	:670 00037   +   00	A &= 31;
	:046 nZnak   +   00			gdy NU, pominąć	
	:330 00033   +   00	A - FS;
	:046 gdyFS   +   00			gdy FS, przełączyć na cyfry	
	:330 00037   +   00	A - LS;
	:046 gdyLS   +   00			gdy LS, przełączyć na litery
	:330 00002   +   00	A - LF;
	:046 gdyLF   +   00			gdy LF, koniec tekstu
	:412 poczt   +   30	B3 = A + [poczt];
	:050 wzory   +   31	A = [wzory+B3];
	:032 00007   +   30	B3 = 7;		licznik rządków
nRząd	:526 00000   +   00	Wy5;
	:016 00005   +   00	A <<<= 5;
	:546 nRząd nZnak 30	SkLC B3-- nRząd;
gdyLF	:012 temp3   +   30	B3 = [temp3];
	:012 temp7 funkc 70	B7 = [temp7];	i Powrót po śladzie

czTTY	:126 00000   +   00	We1; A = znak z dalekopisu
	:016 00042 jZnak 00	A <<<= 34;	i do jZnak

czTXT	:546   +   slowo 40	SkLC B4--;	czy są jeszcze znaki w B7
	:060 00000   +   70	A = B7;		są
	:016 00005 schow 00	A <<<= 5;	i do schowka
slowo	:050 00000   +   51	A = [B5];	słowo ze znakami tekstu
	:646   +     +   50	SkLC B5++;	wskaźnik na nast. słowo
	:032 00006   +   40	B4 = 6;		licznik znaków w słowie
schow	:402 00000 jZnak 70	B7 = A;		i do jZnak

temp3	:000 00000 00000 00	B3 - roboczy
temp4	:000 00000 00000 00	B4 - licznik znaków w słowie
temp5	:000 00000 00000 00	B5 = adres kolejnego słowa tekstu
temp6	:000 00000 00000 00	B6 = funkcja pobierania znaku
temp7	:000 00000 00000 00	B7 - przechowalnia słowa ze znakami

wzory	:007 07777 16700 00	wzór ●
	:770 04172 01037 00	wzór E
	:017 10174 01740 00	wzór ≡
	:350 14376 03061 00	wzór A
	:000 00000 00000 00	wzór  
	:350 14070 03056 00	wzór S
	:342 01020 10216 00	wzór I
	:430 14306 03056 00	wzór U
	:777 17777 17777 00	wzór ⌂
	:750 14306 03076 00	wzór D
	:750 14372 11121 00	wzór R
	:360 10204 03056 00	wzór J
	:430 16326 07061 00	wzór N
	:770 04172 01020 00	wzór F
	:350 14102 01056 00	wzór C
	:431 05142 11121 00	wzór K
	:762 01020 10204 00	wzór T
	:760 10421 01037 00	wzór Z
	:410 04102 01037 00	wzór L
	:430 14327 07561 00	wzór W
	:430 14376 03061 00	wzór H
	:430 12420 10204 00	wzór Y
	:750 14372 01020 00	wzór P
	:350 14306 07157 00	wzór Q
	:350 14306 03056 00	wzór O
	:750 14372 03076 00	wzór B
	:350 14136 03057 00	wzór G
	:000 01073 16000 00	wzór ▲
	:435 16726 03061 00	wzór M
	:430 12421 05061 00	wzór X
	:430 14251 04504 00	wzór V
	:000 07670 10000 00	wzór ▼
	:007 07777 16700 00	wzór ●
	:350 10230 03056 00	wzór 3
	:017 10174 01740 00	wzór ≡
	:000 00174 00000 00	wzór -
	:000 00000 00000 00	wzór  
	:104 00000 00000 00	wzór '
	:350 14272 03056 00	wzór 8
	:760 10421 00410 00	wzór 7
	:777 17777 17777 00	wzór ⌂
	:000 05272 12000 00	wzór *
	:430 14374 02041 00	wzór 4
	:000 00020 00210 00	wzór ;
	:000 00000 00210 00	wzór ,
	:102 01020 00004 00	wzór !
	:000 01000 10000 00	wzór :
	:042 02041 00202 00	wzór (
	:770 07404 03056 00	wzór 5
	:002 01174 10200 00	wzór +
	:202 00410 04210 00	wzór )
	:350 10210 10437 00	wzór 2
	:410 05142 01037 00	wzór Ł
	:144 04172 03056 00	wzór 6
	:350 14326 03056 00	wzór 0
	:106 01020 10216 00	wzór 1
	:350 14274 02114 00	wzór 9
	:350 10210 10004 00	wzór ?
	:305 03066 05115 00	wzór &
	:000 01073 16000 00	wzór ▲
	:000 00000 00004 00	wzór .
	:020 10421 01020 00	wzór /
	:000 07603 16000 00	wzór =
	:000 07670 10000 00	wzór ▼


/*

 ●●●	●●●●	 ●●●	●●●●	●●●●●	●●●●●	 ●●●	●   ●	 ●●●	 ●●●●	●   ●	●	●   ●	●   ●	 ●●●	●●●●	 ●●●	●●●●	 ●●●	●●●●●	●   ●	●   ●	●   ●	●   ●	●   ●	●●●●●
●   ●	●   ●	●   ●	●   ●	●	●	●   ●	●   ●	  ●	    ●	●  ●	●	●● ●●	●   ●	●   ●	●   ●	●   ●	●   ●	●   ●	  ●	●   ●	●   ●	●   ●	●   ●	●   ●	    ●
●   ●	●   ●	●	●   ●	●	●	●	●   ●	  ●	    ●	● ●	●	●● ●●	●●  ●	●   ●	●   ●	●   ●	●   ●	●	  ●	●   ●	●   ●	●   ●	 ● ●	 ● ●	   ●
●●●●●	●●●●	●	●   ●	●●●●	●●●●	● ●●●	●●●●●	  ●	    ●	●●	●	● ● ●	● ● ●	●   ●	●●●●	●   ●	●●●●	 ●●●	  ●	●   ●	 ● ●	● ● ●	  ●	  ●	  ●
●   ●	●   ●	●	●   ●	●	●	●   ●	●   ●	  ●	    ●	● ●	●	●   ●	●  ●●	●   ●	●	●  ●●	● ●	    ●	  ●	●   ●	 ● ●	●● ●●	 ● ●	  ●	 ●
●   ●	●   ●	●   ●	●   ●	●	●	●   ●	●   ●	  ●	●   ●	●  ●	●	●   ●	●   ●	●   ●	●	●  ●●	●  ●	●   ●	  ●	●   ●	 ● ●	●● ●●	●   ●	  ●	●
●   ●	●●●●	 ●●●	●●●●	●●●●●	●	 ●●●●	●   ●	 ●●●	 ●●●	●   ●	●●●●●	●   ●	●   ●	 ●●●	●	 ●●●●	●   ●	 ●●●	  ●	 ●●●	  ●	●   ●	●   ●	  ●	●●●●●	CR



 ●●●		  ●	 ●●●	●●●●●		●   ●			  ●		   ●	●●●●●		 ●	 ●●●	●	  ●●	 ●●●	  ●	 ●●●	 ●●●	 ●● 		    ●		●●●●●
●   ●		 ●	●   ●	    ●		●   ●			  ●		  ●	●	  ●	  ●	●   ●	●	 ●	●   ●	 ●●	●   ●	●   ●	 ● ●		    ●		●●●●●
    ●			●   ●	   ●	● ● ●	●   ●	 		  ●	  ●	 ●	●●●●	  ●	   ●	    ●	● ●	●	●   ●	  ●	●   ●	    ●	 ●●		   ●	●●●●●	●●●●●
  ●●	●●●●●		 ●●●	  ●	 ●●●	●●●●●	  ●		  ●		 ●	    ●	●●●●●	   ●	   ●	●●	●●●●	● ● ●	  ●	 ●●●●	  ●	 ●● ●		  ●		●●●●●
    ●			●   ●	 ●	● ● ●	    ●				  ●	 ●	    ●	  ●	   ●	  ●	●	●   ●	●   ●	  ●	    ●	  ●	●  ●	  	 ●	●●●●●	●●●●●
●   ●			●   ●	 ●		    ●	  ●	  ●			  ●	●   ●	  ●	  ●	 ●	●	●   ●	●   ●	  ●	   ●		●  ●	  	●		●●●●●
 ●●●			 ●●●	 ●		    ●	 ●	 ●	  ●		   ●	 ●●●		 ●	●●●●●	●●●●●	 ●●●	 ●●●	 ●●●	 ●●	  ●	 ●● ●	  ●	●		●●●●●


{let instr = '';
	rz( 0,14,31,31,31,14, 0,'●');
	rz(31,16,16,30,16,16,31,'E');
	rz( 0,31, 0,31, 0,31, 0,'≡');
	rz(14,17,17,31,17,17,17,'A');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz(14,17,16,14, 1,17,14,'S');
	rz(14, 4, 4, 4, 4, 4,14,'I');
	rz(17,17,17,17,17,17,14,'U');
	rz(31,31,31,31,31,31,31,'⌂');
	rz(30,17,17,17,17,17,30,'D');
	rz(30,17,17,30,20,18,17,'R');
	rz(15, 1, 1, 1, 1,17,14,'J');
	rz(17,17,25,21,19,17,17,'N');
	rz(31,16,16,30,16,16,16,'F');
	rz(14,17,16,16,16,17,14,'C');
	rz(17,18,20,24,20,18,17,'K');
	rz(31, 4, 4, 4, 4, 4, 4,'T');
	rz(31, 1, 2, 4, 8,16,31,'Z');
	rz(16,16,16,16,16,16,31,'L');
	rz(17,17,17,21,27,27,17,'W');
	rz(17,17,17,31,17,17,17,'H');
	rz(17,17,10, 4, 4, 4, 4,'Y');
	rz(30,17,17,30,16,16,16,'P');
	rz(14,17,17,17,19,19,15,'Q');
	rz(14,17,17,17,17,17,14,'O');
	rz(30,17,17,30,17,17,30,'B');
	rz(14,17,16,23,17,17,15,'G');
	rz( 0, 0, 4,14,31, 0, 0,'▲');
	rz(17,27,27,21,17,17,17,'M');
	rz(17,17,10, 4,10,17,17,'X');
	rz(17,17,17,10,10,10, 4,'V');
	rz( 0, 0,31,14, 4, 0, 0,'▼');
	rz( 0,14,31,31,31,14, 0,'●');
	rz(14,17, 1, 6, 1,17,14,'3');
	rz( 0,31, 0,31, 0,31, 0,'≡');
	rz( 0, 0, 0,31, 0, 0, 0,'-');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz( 4, 8, 0, 0, 0, 0, 0,"'");
	rz(14,17,17,14,17,17,14,'8');
	rz(31, 1, 2, 4, 8, 8, 8,'7');
	rz(31,31,31,31,31,31,31,'⌂');
	rz( 0, 0,21,14,21, 0, 0,'*');
	rz(17,17,17,31, 1, 1, 1,'4');
	rz( 0, 0, 0, 4, 0, 4, 8,';');
	rz( 0, 0, 0, 0, 0, 4, 8,',');
	rz( 4, 4, 4, 4, 0, 0, 4,'!');
	rz( 0, 0, 4, 0, 4, 0, 0,':');
	rz( 2, 4, 8, 8, 8, 4, 2,'(');
	rz(31,16,30, 1, 1,17,14,'5');
	rz( 0, 4, 4,31, 4, 4, 0,'+');
	rz( 8, 4, 2, 2, 2, 4, 8,')');
	rz(14,17, 1, 2, 4, 8,31,'2');
	rz(16,16,20,24,16,16,31,'Ł');
	rz( 6, 8,16,30,17,17,14,'6');
	rz(14,17,17,21,17,17,14,'0');
	rz( 4,12, 4, 4, 4, 4,14,'1');
	rz(14,17,17,15, 1, 2,12,'9');
	rz(14,17, 1, 2, 4, 0, 4,'?');
	rz(12,10,12,13,18,18,13,'&');
	rz( 0, 0, 4,14,31, 0, 0,'▲');
	rz( 0, 0, 0, 0, 0, 0, 4,'.');
	rz( 1, 1, 2, 4, 8,16,16,'/');
	rz( 0, 0,31, 0,31, 0, 0,'=');
	rz( 0, 0,31,14, 4, 0, 0,'▼');

function rz(a,b,c,d,e,f,g,znak) {
 let	n = ((((((a*32+b)*32+c)*32+d)*32+e)*32+f)*32+g)*16;
 let	tpg= Math.floor(n / 0o10000000000),
	ar = (n >> 17) & 0o17777,
	nr = (n >>  4) & 0o17777,
	bm = (n >>  1) & 7,
	bz = n & 1;
 instr += '\t:' + (tpg+1024).toString(8).substr(1) +' '+ (ar+32768).toString(8).substr(1) +' '+ (nr+32768).toString(8).substr(1) +' '+ bm.toString(8) + bz + '\twzór ' + znak + '\n';
}
console.log(instr);
}

*/
